package com.ruoyi.system.domain.bo;

import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;

import java.util.Date;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 订单业务对象 p_store_order
 *
 * @author ruoyi
 * @date 2022-08-01
 */

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("订单业务对象")
public class PStoreOrderBo extends BaseEntity {

    /**
     * 订单ID
     */
    @ApiModelProperty(value = "订单ID", required = true)
    @NotNull(message = "订单ID不能为空", groups = { EditGroup.class })
    private Long id;

    /**
     * 订单号
     */
    @ApiModelProperty(value = "订单号", required = true)
    @NotBlank(message = "订单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String orderId;

    /**
     * 用户id
     */
    @ApiModelProperty(value = "用户id", required = true)
    @NotNull(message = "用户id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long uid;

    /**
     * 用户姓名
     */
    @ApiModelProperty(value = "用户姓名", required = true)
    @NotBlank(message = "用户姓名不能为空", groups = { AddGroup.class, EditGroup.class })
    private String realName;

    /**
     * 用户电话
     */
    @ApiModelProperty(value = "用户电话", required = true)
    @NotBlank(message = "用户电话不能为空", groups = { AddGroup.class, EditGroup.class })
    private String userPhone;

    /**
     * 详细地址
     */
    @ApiModelProperty(value = "详细地址", required = true)
    @NotBlank(message = "详细地址不能为空", groups = { AddGroup.class, EditGroup.class })
    private String userAddress;

    /**
     * 运费金额
     */
    @ApiModelProperty(value = "运费金额", required = true)
    @NotNull(message = "运费金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal freightPrice;

    /**
     * 订单商品总数
     */
    @ApiModelProperty(value = "订单商品总数", required = true)
    @NotNull(message = "订单商品总数不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long totalNum;

    /**
     * 订单总价
     */
    @ApiModelProperty(value = "订单总价", required = true)
    @NotNull(message = "订单总价不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal totalPrice;

    /**
     * 邮费
     */
    @ApiModelProperty(value = "邮费", required = true)
    @NotNull(message = "邮费不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal totalPostage;

    /**
     * 实际支付金额
     */
    @ApiModelProperty(value = "实际支付金额", required = true)
    @NotNull(message = "实际支付金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal payPrice;

    /**
     * 支付邮费
     */
    @ApiModelProperty(value = "支付邮费", required = true)
    @NotNull(message = "支付邮费不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal payPostage;

    /**
     * 抵扣金额
     */
    @ApiModelProperty(value = "抵扣金额", required = true)
    @NotNull(message = "抵扣金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal deductionPrice;

    /**
     * 优惠券id
     */
    @ApiModelProperty(value = "优惠券id", required = true)
    @NotNull(message = "优惠券id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long couponId;

    /**
     * 优惠券金额
     */
    @ApiModelProperty(value = "优惠券金额", required = true)
    @NotNull(message = "优惠券金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal couponPrice;

    /**
     * 支付状态
     */
    @ApiModelProperty(value = "支付状态", required = true)
    @NotNull(message = "支付状态不能为空", groups = { AddGroup.class, EditGroup.class })
    private String paid;

    /**
     * 支付时间
     */
    @ApiModelProperty(value = "支付时间", required = true)
    @NotNull(message = "支付时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date payTime;

    /**
     * 支付方式
     */
    @ApiModelProperty(value = "支付方式", required = true)
    @NotBlank(message = "支付方式不能为空", groups = { AddGroup.class, EditGroup.class })
    private String payType;

    /**
     * 订单状态（0：待发货；1：待收货；2：已收货，待评价；3：已完成；）
     */
    @ApiModelProperty(value = "订单状态（0：待发货；1：待收货；2：已收货，待评价；3：已完成；）", required = true)
    @NotNull(message = "订单状态（0：待发货；1：待收货；2：已收货，待评价；3：已完成；）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String status;

    /**
     * 0 未退款 1 申请中 2 已退款 3 退款中
     */
    @ApiModelProperty(value = "0 未退款 1 申请中 2 已退款 3 退款中", required = true)
    @NotNull(message = "0 未退款 1 申请中 2 已退款 3 退款中不能为空", groups = { AddGroup.class, EditGroup.class })
    private String refundStatus;

    /**
     * 退款图片
     */
    @ApiModelProperty(value = "退款图片", required = true)
    @NotBlank(message = "退款图片不能为空", groups = { AddGroup.class, EditGroup.class })
    private String refundReasonWapImg;

    /**
     * 退款用户说明
     */
    @ApiModelProperty(value = "退款用户说明", required = true)
    @NotBlank(message = "退款用户说明不能为空", groups = { AddGroup.class, EditGroup.class })
    private String refundReasonWapExplain;

    /**
     * 前台退款原因
     */
    @ApiModelProperty(value = "前台退款原因", required = true)
    @NotBlank(message = "前台退款原因不能为空", groups = { AddGroup.class, EditGroup.class })
    private String refundReasonWap;

    /**
     * 不退款的理由
     */
    @ApiModelProperty(value = "不退款的理由", required = true)
    @NotBlank(message = "不退款的理由不能为空", groups = { AddGroup.class, EditGroup.class })
    private String refundReason;

    /**
     * 退款时间
     */
    @ApiModelProperty(value = "退款时间", required = true)
    @NotNull(message = "退款时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date refundReasonTime;

    /**
     * 退款金额
     */
    @ApiModelProperty(value = "退款金额", required = true)
    @NotNull(message = "退款金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal refundPrice;

    /**
     * 快递名称/送货人姓名
     */
    @ApiModelProperty(value = "快递名称/送货人姓名", required = true)
    @NotBlank(message = "快递名称/送货人姓名不能为空", groups = { AddGroup.class, EditGroup.class })
    private String deliveryName;

    /**
     * 发货类型
     */
    @ApiModelProperty(value = "发货类型", required = true)
    @NotBlank(message = "发货类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String deliveryType;

    /**
     * 快递单号/手机号
     */
    @ApiModelProperty(value = "快递单号/手机号", required = true)
    @NotBlank(message = "快递单号/手机号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String deliveryId;

    /**
     * 消费赚取积分
     */
    @ApiModelProperty(value = "消费赚取积分", required = true)
    @NotNull(message = "消费赚取积分不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long gainIntegral;

    /**
     * 使用积分
     */
    @ApiModelProperty(value = "使用积分", required = true)
    @NotNull(message = "使用积分不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long useIntegral;

    /**
     * 给用户退了多少积分
     */
    @ApiModelProperty(value = "给用户退了多少积分", required = true)
    @NotNull(message = "给用户退了多少积分不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long backIntegral;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注", required = true)
    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
    private String mark;

    /**
     * 管理员备注
     */
    @ApiModelProperty(value = "管理员备注", required = true)
    @NotBlank(message = "管理员备注不能为空", groups = { AddGroup.class, EditGroup.class })
    private String remark;

    /**
     * 商户ID
     */
    @ApiModelProperty(value = "商户ID", required = true)
    @NotNull(message = "商户ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer merId;

    /**
     *
     */
    @ApiModelProperty(value = "", required = true)
    @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer isMerCheck;

    /**
     * 拼团商品id0一般商品
     */
    @ApiModelProperty(value = "拼团商品id0一般商品", required = true)
    @NotNull(message = "拼团商品id0一般商品不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long combinationId;

    /**
     * 拼团id 0没有拼团
     */
    @ApiModelProperty(value = "拼团id 0没有拼团", required = true)
    @NotNull(message = "拼团id 0没有拼团不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long pinkId;

    /**
     * 成本价
     */
    @ApiModelProperty(value = "成本价", required = true)
    @NotNull(message = "成本价不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal cost;

    /**
     * 秒杀商品ID
     */
    @ApiModelProperty(value = "秒杀商品ID", required = true)
    @NotNull(message = "秒杀商品ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long seckillId;

    /**
     * 砍价id
     */
    @ApiModelProperty(value = "砍价id", required = true)
    @NotNull(message = "砍价id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long bargainId;

    /**
     * 核销码
     */
    @ApiModelProperty(value = "核销码", required = true)
    @NotBlank(message = "核销码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String verifyCode;

    /**
     * 门店id
     */
    @ApiModelProperty(value = "门店id", required = true)
    @NotNull(message = "门店id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long storeId;

    /**
     * 配送方式 1=快递 ，2=门店自提
     */
    @ApiModelProperty(value = "配送方式 1=快递 ，2=门店自提", required = true)
    @NotNull(message = "配送方式 1=快递 ，2=门店自提不能为空", groups = { AddGroup.class, EditGroup.class })
    private String shippingType;

    /**
     * 店员id/核销员id
     */
    @ApiModelProperty(value = "店员id/核销员id", required = true)
    @NotNull(message = "店员id/核销员id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long clerkId;

    /**
     * 支付渠道(0微信公众号1微信小程序2余额)
     */
    @ApiModelProperty(value = "支付渠道(0微信公众号1微信小程序2余额)", required = true)
    @NotNull(message = "支付渠道(0微信公众号1微信小程序2余额)不能为空", groups = { AddGroup.class, EditGroup.class })
    private String isChannel;

    /**
     * 消息提醒
     */
    @ApiModelProperty(value = "消息提醒", required = true)
    @NotNull(message = "消息提醒不能为空", groups = { AddGroup.class, EditGroup.class })
    private String isRemind;

    /**
     * 快递公司简称
     */
    @ApiModelProperty(value = "快递公司简称", required = true)
    @NotBlank(message = "快递公司简称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String deliveryCode;

    /**
     * 用户拼团活动id 0没有
     */
    @ApiModelProperty(value = "用户拼团活动id 0没有", required = true)
    @NotNull(message = "用户拼团活动id 0没有不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long bargainUserId;

    /**
     * 订单类型:0-普通订单，1-视频号订单
     */
    @ApiModelProperty(value = "订单类型:0-普通订单，1-视频号订单", required = true)
    @NotNull(message = "订单类型:0-普通订单，1-视频号订单不能为空", groups = { AddGroup.class, EditGroup.class })
    private String type;

    /**
     * 商品总价
     */
    @ApiModelProperty(value = "商品总价", required = true)
    @NotNull(message = "商品总价不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal proTotalPrice;

    /**
     * 改价前支付金额
     */
    @ApiModelProperty(value = "改价前支付金额", required = true)
    @NotNull(message = "改价前支付金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal beforePayPrice;

    /**
     * 是否改价,0-否，1-是
     */
    @ApiModelProperty(value = "是否改价,0-否，1-是", required = true)
    @NotNull(message = "是否改价,0-否，1-是不能为空", groups = { AddGroup.class, EditGroup.class })
    private String isAlterPrice;

    /**
     * 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
     */
    @ApiModelProperty(value = "商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号", required = true)
    @NotBlank(message = "商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String outTradeNo;


}
